home *** CD-ROM | disk | FTP | other *** search
- *
- * Script to plot a colorbar
- *
- * The script will assume a colorbar is wanted even if there is
- * not room -- it will plot on the side or the bottom if there is
- * room in either place, otherwise it will plot along the bottom and
- * overlay labels there if any. This can be dealt with via
- * the 'set parea' command. In version 2 the default parea will
- * be changed, but we want to guarantee upward compatibility in
- * sub-releases.
- *
- *
- * modifications by mike fiorino 940614
- *
- * - the extreme colors are plotted as triangles
- * - the colors are boxed in white
- * - input arguments in during a run execution:
- *
- * run cbarn sf vert xmid ymid
- *
- * sf - scale the whole bar 1.0 = original 0.5 half the size, etc.
- * vert - 0 FORCES a horizontal bar = 1 a vertical bar
- * xmid - the x position on the virtual page the center the bar
- * ymid - the x position on the virtual page the center the bar
- *
- * if vert,xmid,ymid are not specified, they are selected
- * as in the original algorithm
- *
-
- function colorbar (args)
-
- sf=subwrd(args,1)
- vert=subwrd(args,2)
- xmid=subwrd(args,3)
- ymid=subwrd(args,4)
-
- if(sf='');sf=1.0;endif
-
- *
- * Check shading information
- *
- 'query shades'
- shdinfo = result
- if (subwrd(shdinfo,1)='None')
- say 'Cannot plot color bar: No shading information'
- return
- endif
-
- *
- * Get plot size info
- *
- 'query gxinfo'
- rec2 = sublin(result,2)
- rec3 = sublin(result,3)
- rec4 = sublin(result,4)
- xsiz = subwrd(rec2,4)
- ysiz = subwrd(rec2,6)
- ylo = subwrd(rec4,4)
- xhi = subwrd(rec3,6)
- xd = xsiz - xhi
-
- ylolim=0.6*sf
- xdlim1=1.0*sf
- xdlim2=1.5*sf
- barsf=0.8*sf
- yoffset=0.2*sf
- stroff=0.05*sf
- strxsiz=0.12*sf
- strysiz=0.13*sf
- *
- * Decide if horizontal or vertical color bar
- * and set up constants.
- *
- if (ylo<ylolim & xd<xdlim1)
- say "Not enough room in plot for a colorbar"
- return
- endif
- cnum = subwrd(shdinfo,5)
- *
- * logic for setting the bar orientation with user overides
- *
- if (ylo<ylolim | xd>xdlim1)
- vchk = 1
- if(vert = 0) ; vchk = 0 ; endif
- else
- vchk = 0
- if(vert = 1) ; vchk = 1 ; endif
- endif
- *
- * vertical bar
- *
-
- if (vchk = 1 )
-
- if(xmid = '') ; xmid = xhi+xd/2 ; endif
- xwid = 0.2*sf
- ywid = 0.5*sf
-
- xl = xmid-xwid/2
- xr = xl + xwid
- if (ywid*cnum > ysiz*barsf)
- ywid = ysiz*barsf/cnum
- endif
- if(ymid = '') ; ymid = ysiz/2 ; endif
- yb = ymid - ywid*cnum/2
- 'set string 1 l 5'
- vert = 1
-
- else
-
- *
- * horizontal bar
- *
-
- ywid = 0.4
- xwid = 0.8
-
- if(ymid = '') ; ymid = ylo/2-ywid/2 ; endif
- yt = ymid + yoffset
- yb = ymid
- if(xmid = '') ; xmid = xsiz/2 ; endif
- if (xwid*cnum > xsiz*barsf)
- xwid = xsiz*barsf/cnum
- endif
- xl = xmid - xwid*cnum/2
- 'set string 1 tc 5'
- vert = 0
- endif
-
-
- *
- * Plot colorbar
- *
-
-
- 'set strsiz 'strxsiz' 'strysiz
- num = 0
- while (num<cnum)
- rec = sublin(shdinfo,num+2)
- col = subwrd(rec,1)
- hi = subwrd(rec,3)
- if (vert)
- yt = yb + ywid
- else
- xr = xl + xwid
- endif
-
- if(num!=0 & num!= cnum-1)
- 'set line 1 1 10'
- 'draw rec 'xl' 'yb' 'xr' 'yt
- 'set line 'col
- 'draw recf 'xl' 'yb' 'xr' 'yt
- if (num<cnum-1)
- if (vert)
- xp=xr+stroff
- 'draw string 'xp' 'yt' 'hi
- else
- yp=yb-stroff
- 'draw string 'xr' 'yp' 'hi
- endif
- endif
- endif
-
- if(num = 0 )
-
- if(vert = 1)
-
- xm=(xl+xr)*0.5
- 'set line 1 1 10'
- 'draw line 'xl' 'yt' 'xm' 'yb
- 'draw line 'xm' 'yb' 'xr' 'yt
- 'draw line 'xr' 'yt' 'xl' 'yt
-
- 'set line 'col
- 'draw polyf 'xl' 'yt' 'xm' 'yb' 'xr' 'yt' 'xl' 'yt
-
- else
-
- ym=(yb+yt)*0.5
- 'set line 1 1 10'
- 'draw line 'xl' 'ym' 'xr' 'yb
- 'draw line 'xr' 'yb' 'xr' 'yt
- 'draw line 'xr' 'yt' 'xl' 'ym
-
- 'set line 'col
- 'draw polyf 'xl' 'ym' 'xr' 'yb' 'xr' 'yt' 'xl' 'ym
-
- endif
-
- endif
-
- if (num<cnum-1)
- if (vert)
- xp=xr+stroff
- 'draw string 'xp' 'yt' 'hi
- else
- yp=yb-stroff
- 'draw string 'xr' 'yp' 'hi
- endif
- endif
-
- if(num = cnum-1 )
-
- if( vert = 1)
- 'set line 1 1 10'
- 'draw line 'xl' 'yb' 'xm' 'yt
- 'draw line 'xm' 'yt' 'xr' 'yb
- 'draw line 'xr' 'yb' 'xl' 'yb
-
- 'set line 'col
- 'draw polyf 'xl' 'yb' 'xm' 'yt' 'xr' 'yb' 'xl' 'yb
- else
-
- 'set line 1 1 10'
- 'draw line 'xr' 'ym' 'xl' 'yb
- 'draw line 'xl' 'yb' 'xl' 'yt
- 'draw line 'xl' 'yt' 'xr' 'ym
-
- 'set line 'col
- 'draw polyf 'xr' 'ym' 'xl' 'yb' 'xl' 'yt' 'xr' 'ym
-
-
- endif
-
- endif
-
- if (num<cnum-1)
- if (vert)
- xp=xr+stroff
- 'draw string 'xp' 'yt' 'hi
- else
- yp=yb-stroff
- 'draw string 'xr' 'yp' 'hi
- endif
- endif
-
- num = num + 1
- if (vert); yb = yt;
- else; xl = xr; endif;
- endwhile
- return
-